import java.io.*;
import java.util.*;

//レーティングの計算
//RPI = 0.25 * WP + 0.50 * OWP + 0.25 * OOWP
//WP：勝率　OWP：WP*勝利チームのWPの和　OOWP：OWP*勝利チームのOWPの和

public class RPI {
	public static void main(String args[]){
		try{
			Scanner sc = new Scanner(new File("A-large.in"));//入力ファイル
			PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(new File("solve.in"))));//出力ファイル
			int T = sc.nextInt();//ループ回数
			for(int i=1;i<=T;i++){
				int number = sc.nextInt();
				String[] value = new String[number];
				double[] wp    = new double[number];
				double[] owp   = new double[number];
				double[] oowp  = new double[number];
				for(int j=0;j<number;j++)value[j]=sc.next();//valueにデータ読み込み
				for(int j=0;j<number;j++){//WPの計算
					double a = 0;
					double b = 0;
					for(int k=0;k<number;k++){
						if(value[j].charAt(k)=='1'){
							a++;
							b++;
						}
						else if(value[j].charAt(k)=='0'){
							b++;
						}
					}
					wp[j]=a/b;
				}
				for(int j=0;j<number;j++){//OWPの計算
					double a = 0;
					double b = 0;
					for(int k=0;k<number;k++){
						if(value[j].charAt(k)=='1' || value[j].charAt(k)=='0'){
							double c = 0;
							double d = 0;
							for(int l=0;l<number;l++){
								if(j!=l)
								if(value[k].charAt(l)=='1'){
									c++;
									d++;;
								}else if(value[k].charAt(l)=='0'){
									d++;
								}
							}
							a+=c/d;
							b++;
						}
					}
					owp[j]=a/b;
				}
				for(int j=0;j<number;j++){//OOWPの計算
					double a = 0;
					double b = 0;
					for(int k=0;k<number;k++){
						if(value[j].charAt(k)=='1' || value[j].charAt(k)=='0'){
							a+=owp[k];
							b++;
						}

					}
					oowp[j]=a/b;
				}
				pw.println("Case #"+i+":");//出力
				for(int j=0;j<number;j++)pw.println(0.25*wp[j]+0.50*owp[j]+0.25*oowp[j]);
			}
			pw.close();
		}catch(FileNotFoundException e){
			System.out.println(e);
		}catch(IOException e){
			System.out.println(e);			
		}
	}
}
